package com.zlc.sykks.CourseDesign;


import cn.hutool.core.util.StrUtil;
import com.zlc.sykks.constance.FileConstance;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

/*
* 实现对文件的处理
* */
public class FileRunnable implements Runnable{


    //方便外部传参
    private MultipartFile file;

    //默认参数设置
    private static final String FILE_UPLOAD_DIR = "E:\\test";

    //设置file
    public void setFile(MultipartFile file){
        this.file = file;
    }

    //实现对文件进行本地保存
    @Override
    public void run() {
        try {
            //获取原始文件名称
            String originalFilename = file.getOriginalFilename();
            //生成新文件名称
            String fileName = createFileName(originalFilename);
            //保存文件
            file.transferTo(new File(FILE_UPLOAD_DIR,fileName));
        } catch (IOException e) {
            throw new RuntimeException(FileConstance.FILE_FAIL,e);
        }
    }

    //生成新的文件名
    private String createFileName(String originalFilename){
        // 获取后缀
        String suffix = StrUtil.subAfter(originalFilename, ".", true);
        //生成新文件名
        String fileName = UUID.randomUUID().toString();
        //创建一级目录
        String d1 = LocalDateTime.now()
                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd")).toString();
        File dir =new File(FILE_UPLOAD_DIR,"/zlc/" + d1);
        //判断目录是否存在
        if(!dir.exists()){
            dir.mkdirs();
        }
        //生成文件名
        return "/zlc/" + d1 + "/" + fileName + "." + suffix;
    }
}

























